package com.beyondsphere.deprecated;
///*
// * Copyright (c) Citrix Systems, Inc.
// *
// * This library is free software; you can redistribute it and/or modify it
// * under the terms of version 2 of the GNU General Public License as published
// * by the Free Software Foundation, with the additional linking exception as
// * follows:
// * 
// *   Linking this library statically or dynamically with other modules is
// *   making a combined work based on this library. Thus, the terms and
// *   conditions of the GNU General Public License cover the whole combination.
// * 
// *   As a special exception, the copyright holders of this library give you
// *   permission to link this library with independent modules to produce an
// *   executable, regardless of the license terms of these independent modules,
// *   and to copy and distribute the resulting executable under terms of your
// *   choice, provided that you also meet, for each linked independent module,
// *   the terms and conditions of the license of that module. An independent
// *   module is a module which is not derived from or based on this library. If
// *   you modify this library, you may extend this exception to your version of
// *   the library, but you are not obligated to do so. If you do not wish to do
// *   so, delete this exception statement from your version.
// * 
// * This program is distributed in the hope that it will be useful, but WITHOUT
// * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
// * more details.
// * 
// * You should have received a copy of the GNU General Public License along
// * with this program; if not, write to the Free Software Foundation, Inc., 51
// * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
// */
//
//package com.once.xenapi;
//
//import com.once.xenapi.Types.BadServerResponse;
//import com.once.xenapi.Types.VersionException;
//import com.once.xenapi.Types.XenAPIException;
//
//import java.io.PrintWriter;
//import java.io.StringWriter;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.LinkedHashSet;
//import java.util.Map;
//import java.util.Set;
//
//import org.apache.xmlrpc.XmlRpcException;
//
///**
// * Pool-wide patches
// *
// * @author Citrix Systems, Inc.
// */
//public class PoolPatch extends XenAPIObject {
//
//    /**
//     * The XenAPI reference to this object.
//     */
//    protected final String ref;
//
//    /**
//     * For internal use only.
//     */
//    PoolPatch(String ref) {
//       this.ref = ref;
//    }
//
//    public String toWireString() {
//       return this.ref;
//    }
//
//    /**
//     * If obj is a PoolPatch, compares XenAPI references for equality.
//     */
//    @Override
//    public boolean equals(Object obj)
//    {
//        if (obj != null && obj instanceof PoolPatch)
//        {
//            PoolPatch other = (PoolPatch) obj;
//            return other.ref.equals(this.ref);
//        } else
//        {
//            return false;
//        }
//    }
//
//    @Override
//    public int hashCode()
//    {
//        return ref.hashCode();
//    }
//
//    /**
//     * Represents all the fields in a PoolPatch
//     */
//    public static class Record implements Types.Record {
//        public String toString() {
//            StringWriter writer = new StringWriter();
//            PrintWriter print = new PrintWriter(writer);
//            print.printf("%1$20s: %2$s\n", "uuid", this.uuid);
//            print.printf("%1$20s: %2$s\n", "nameLabel", this.nameLabel);
//            print.printf("%1$20s: %2$s\n", "nameDescription", this.nameDescription);
//            print.printf("%1$20s: %2$s\n", "version", this.version);
//            print.printf("%1$20s: %2$s\n", "size", this.size);
//            print.printf("%1$20s: %2$s\n", "poolApplied", this.poolApplied);
//            print.printf("%1$20s: %2$s\n", "hostPatches", this.hostPatches);
//            print.printf("%1$20s: %2$s\n", "afterApplyGuidance", this.afterApplyGuidance);
//            print.printf("%1$20s: %2$s\n", "otherConfig", this.otherConfig);
//            return writer.toString();
//        }
//
//        /**
//         * Convert a pool_patch.Record to a Map
//         */
//        public Map<String,Object> toMap() {
//            Map<String,Object> map = new HashMap<String,Object>();
//            map.put("uuid", this.uuid == null ? "" : this.uuid);
//            map.put("name_label", this.nameLabel == null ? "" : this.nameLabel);
//            map.put("name_description", this.nameDescription == null ? "" : this.nameDescription);
//            map.put("version", this.version == null ? "" : this.version);
//            map.put("size", this.size == null ? 0 : this.size);
//            map.put("pool_applied", this.poolApplied == null ? false : this.poolApplied);
//            map.put("host_patches", this.hostPatches == null ? new LinkedHashSet<HostPatch>() : this.hostPatches);
//            map.put("after_apply_guidance", this.afterApplyGuidance == null ? new LinkedHashSet<Types.AfterApplyGuidance>() : this.afterApplyGuidance);
//            map.put("other_config", this.otherConfig == null ? new HashMap<String, String>() : this.otherConfig);
//            return map;
//        }
//
//        /**
//         * Unique identifier/object reference
//         */
//        public String uuid;
//        /**
//         * a human-readable name
//         */
//        public String nameLabel;
//        /**
//         * a notes field containg human-readable description
//         */
//        public String nameDescription;
//        /**
//         * Patch version number
//         */
//        public String version;
//        /**
//         * Size of the patch
//         */
//        public Long size;
//        /**
//         * This patch should be applied across the entire pool
//         */
//        public Boolean poolApplied;
//        /**
//         * This hosts this patch is applied to.
//         */
//        public Set<HostPatch> hostPatches;
//        /**
//         * What the client should do after this patch has been applied.
//         */
//        public Set<Types.AfterApplyGuidance> afterApplyGuidance;
//        /**
//         * additional configuration
//         */
//        public Map<String, String> otherConfig;
//    }
//
//    /**
//     * Get a record containing the current state of the given pool_patch.
//     *
//     * @return all fields from the object
//     */
//    public PoolPatch.Record getRecord(Connection c) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.get_record";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//            return Types.toPoolPatchRecord(result);
//    }
//
//    /**
//     * Get a reference to the pool_patch instance with the specified UUID.
//     *
//     * @param uuid UUID of object to return
//     * @return reference to the object
//     */
//    public static PoolPatch getByUuid(Connection c, String uuid) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.get_by_uuid";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(uuid)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//            return Types.toPoolPatch(result);
//    }
//
//    /**
//     * Get all the pool_patch instances with the given label.
//     *
//     * @param label label of object to return
//     * @return references to objects with matching names
//     */
//    public static Set<PoolPatch> getByNameLabel(Connection c, String label) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.get_by_name_label";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(label)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//            return Types.toSetOfPoolPatch(result);
//    }
//
//    /**
//     * Get the uuid field of the given pool_patch.
//     *
//     * @return value of the field
//     */
//    public String getUuid(Connection c) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.get_uuid";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//            return Types.toString(result);
//    }
//
//    /**
//     * Get the name/label field of the given pool_patch.
//     *
//     * @return value of the field
//     */
//    public String getNameLabel(Connection c) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.get_name_label";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//            return Types.toString(result);
//    }
//
//    /**
//     * Get the name/description field of the given pool_patch.
//     *
//     * @return value of the field
//     */
//    public String getNameDescription(Connection c) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.get_name_description";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//            return Types.toString(result);
//    }
//
//    /**
//     * Get the version field of the given pool_patch.
//     *
//     * @return value of the field
//     */
//    public String getVersion(Connection c) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.get_version";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//            return Types.toString(result);
//    }
//
//    /**
//     * Get the size field of the given pool_patch.
//     *
//     * @return value of the field
//     */
//    public Long getSize(Connection c) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.get_size";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//            return Types.toLong(result);
//    }
//
//    /**
//     * Get the pool_applied field of the given pool_patch.
//     *
//     * @return value of the field
//     */
//    public Boolean getPoolApplied(Connection c) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.get_pool_applied";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//            return Types.toBoolean(result);
//    }
//
//    /**
//     * Get the host_patches field of the given pool_patch.
//     *
//     * @return value of the field
//     */
//    public Set<HostPatch> getHostPatches(Connection c) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.get_host_patches";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//            return Types.toSetOfHostPatch(result);
//    }
//
//    /**
//     * Get the after_apply_guidance field of the given pool_patch.
//     *
//     * @return value of the field
//     */
//    public Set<Types.AfterApplyGuidance> getAfterApplyGuidance(Connection c) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.get_after_apply_guidance";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//            return Types.toSetOfAfterApplyGuidance(result);
//    }
//
//    /**
//     * Get the other_config field of the given pool_patch.
//     *
//     * @return value of the field
//     */
//    public Map<String, String> getOtherConfig(Connection c) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.get_other_config";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//            return Types.toMapOfStringString(result);
//    }
//
//    /**
//     * Set the other_config field of the given pool_patch.
//     *
//     * @param otherConfig New value to set
//     */
//    public void setOtherConfig(Connection c, Map<String, String> otherConfig) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.set_other_config";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref), Marshalling.toXMLRPC(otherConfig)};
//        Map response = c.dispatch(method_call, method_params);
//        return;
//    }
//
//    /**
//     * Add the given key-value pair to the other_config field of the given pool_patch.
//     *
//     * @param key Key to add
//     * @param value Value to add
//     */
//    public void addToOtherConfig(Connection c, String key, String value) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.add_to_other_config";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref), Marshalling.toXMLRPC(key), Marshalling.toXMLRPC(value)};
//        Map response = c.dispatch(method_call, method_params);
//        return;
//    }
//
//    /**
//     * Remove the given key and its corresponding value from the other_config field of the given pool_patch.  If the key is not in that Map, then do nothing.
//     *
//     * @param key Key to remove
//     */
//    public void removeFromOtherConfig(Connection c, String key) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.remove_from_other_config";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref), Marshalling.toXMLRPC(key)};
//        Map response = c.dispatch(method_call, method_params);
//        return;
//    }
//
//    /**
//     * Apply the selected patch to a host and return its output
//     *
//     * @param host The host to apply the patch too
//     * @return Task
//     */
//    public Task applyAsync(Connection c, Host host) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "Async.pool_patch.apply";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref), Marshalling.toXMLRPC(host)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//        return Types.toTask(result);
//    }
//
//    /**
//     * Apply the selected patch to a host and return its output
//     *
//     * @param host The host to apply the patch too
//     * @return the output of the patch application process
//     */
//    public String apply(Connection c, Host host) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.apply";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref), Marshalling.toXMLRPC(host)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//            return Types.toString(result);
//    }
//
//    /**
//     * Apply the selected patch to all hosts in the pool and return a map of host_ref -> patch output
//     *
//     * @return Task
//     */
//    public Task poolApplyAsync(Connection c) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "Async.pool_patch.pool_apply";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//        return Types.toTask(result);
//    }
//
//    /**
//     * Apply the selected patch to all hosts in the pool and return a map of host_ref -> patch output
//     *
//     */
//    public void poolApply(Connection c) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.pool_apply";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
//        Map response = c.dispatch(method_call, method_params);
//        return;
//    }
//
//    /**
//     * Execute the precheck stage of the selected patch on a host and return its output
//     *
//     * @param host The host to run the prechecks on
//     * @return Task
//     */
//    public Task precheckAsync(Connection c, Host host) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "Async.pool_patch.precheck";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref), Marshalling.toXMLRPC(host)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//        return Types.toTask(result);
//    }
//
//    /**
//     * Execute the precheck stage of the selected patch on a host and return its output
//     *
//     * @param host The host to run the prechecks on
//     * @return the output of the patch prechecks
//     */
//    public String precheck(Connection c, Host host) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.precheck";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref), Marshalling.toXMLRPC(host)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//            return Types.toString(result);
//    }
//
//    /**
//     * Removes the patch's files from all hosts in the pool, but does not remove the database entries
//     *
//     * @return Task
//     */
//    public Task cleanAsync(Connection c) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "Async.pool_patch.clean";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//        return Types.toTask(result);
//    }
//
//    /**
//     * Removes the patch's files from all hosts in the pool, but does not remove the database entries
//     *
//     */
//    public void clean(Connection c) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.clean";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
//        Map response = c.dispatch(method_call, method_params);
//        return;
//    }
//
//    /**
//     * Removes the patch's files from all hosts in the pool, and removes the database entries.  Only works on unapplied patches.
//     *
//     * @return Task
//     */
//    public Task destroyAsync(Connection c) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "Async.pool_patch.destroy";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//        return Types.toTask(result);
//    }
//
//    /**
//     * Removes the patch's files from all hosts in the pool, and removes the database entries.  Only works on unapplied patches.
//     *
//     */
//    public void destroy(Connection c) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.destroy";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
//        Map response = c.dispatch(method_call, method_params);
//        return;
//    }
//
//    /**
//     * Return a list of all the pool_patchs known to the system.
//     *
//     * @return references to all objects
//     */
//    public static Set<PoolPatch> getAll(Connection c) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.get_all";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//            return Types.toSetOfPoolPatch(result);
//    }
//
//    /**
//     * Return a map of pool_patch references to pool_patch records for all pool_patchs known to the system.
//     *
//     * @return records of all objects
//     */
//    public static Map<PoolPatch, PoolPatch.Record> getAllRecords(Connection c) throws
//       BadServerResponse,
//       XenAPIException,
//       XmlRpcException {
//        String method_call = "pool_patch.get_all_records";
//        String session = c.getSessionReference();
//        Object[] method_params = {Marshalling.toXMLRPC(session)};
//        Map response = c.dispatch(method_call, method_params);
//        Object result = response.get("Value");
//            return Types.toMapOfPoolPatchPoolPatchRecord(result);
//    }
//
//}